
"""set
1.set中的元素不可重复
2.无序
3.里面的元素必须可hash(int, str, tuple, bool)
"""

#1.必须可hash
#s1 = {'1', 2, 'lisi', True, [1, 2, 3]}#报错
# 报错 SyntaxError: invalid syntax
#s1 = {'1', 2, 'lisi', True, [1:2]}
# 报错 TypeError: unhashable type: 'list'
#s1 = {'1', 2, 'lisi', True, (1, 2, [2,3,4])}

#2.不重复， 且无序
s2 = {"张三", "张三", "李四"}
print(s2) #{'张三', '李四'}
# 我们可以使用set来去重
lst = ["张三", "张三", "李四"]
lst = list(set(lst))
print(lst) # ['李四', '张三']

#3.set的增删该查
s3 = {"aaa"}
s3.add("bbb")
print(s3)

# 查询, set可迭代
for s in s3:
    print(s)

# 随机删除一个
#item = s3.pop()
#print(item, s3) #bbb {'aaa'}

# 直接删除元素
s3.remove("aaa")
print(s3)

# 修改, 没有索引, 所以无法直接修改, 我们可以先删除后添加的方式实现修改
s3.remove("bbb")
s3.add("ddd")
print(s3) # {'ddd'}

# 清空
s3.clear()
print(s3) # set()

s1 = {"aaa", "bbb"}
s2 = {"bbb", "ccc"}

#交集
print(s1 & s2) #{'bbb'}
print(s1.intersection(s2)) #{'bbb'}

# 并集
print(s1|s2) #{'bbb', 'aaa', 'ccc'}
print(s1.union(s2))

#差集, 得到s1中单独存在的
print(s1-s2) #{'aaa'}
print(s1.difference(s2))

#反交集, s1和s2中单独存在的
print(s1^s2) #{'aaa', 'ccc'}
print(s1.symmetric_difference(s2))

#子集
print(s1<s2) #False
print(s1.issubset(s2))

#超集
print(s1>s2)#False
print(s1.issuperset(s2))

"""
set集合本身不可hash, 我们可以使用frozenset来保存数据, frozenset是不可变的, 也就是一个可哈希的数据类型
(了解)
"""






